// 可以从外部引入baseURL,也可以定义到config下的baseURL中

// import baseURL from '@/common/baseURL.js'
import Cookies from "js-cookie";
import {
	getToken,
	setToken,
	removeToken
} from "@/utils/auth.js"

export default {

	config: {

		baseURL: 'http://43.139.243.117:8082/prod-api',

		// 处理token的方法

		getToken() {

			let token = getToken();

			if (!token) {

				return uni.reLaunch({

					url: '/pages/login/index'

				})

			}

			return token

		},

		// 请求拦截器

		beforeRequest(options = {}) {

			return new Promise((resolve, reject) => {

				options.url = this.baseURL + options.url;

				options.method = options.method || 'GET';

				// 封装自己的请求头

				if (options.url.indexOf('/login') == -1 && options.url.indexOf('/register') == -1) {
					options.header = {
						Authorization: 'Bearer ' + this.getToken(),
					}
				}

				resolve(options)

			})

		},
		// 响应拦截器


		handleResponse(data, config) {
			return new Promise((resolve, reject) => {

				const res = data.data;

				// 处理错误
				if (res) {
					switch (res.code) {
						case 200:
							// let msg = res.msg || '请求错误';

							// uni.showToast({

							// 	icon: 'none',

							// 	title: msg

							// })

							if (config.url.indexOf('/login') != -1) {
								setToken(res.token)
							}
							return resolve(res);
							break;
						case 401:
							// uni.setStorageSync('token')
							removeToken()
							this.getToken();
							break;
						case 403:
							uni.showToast({
								icon: 'none',
								title: '暂无权限，请联系管理员处理'
							})
							break;
						case 500:
							uni.showToast({

								icon: 'none',

								title: res.msg

							})

							break;

						default:
							break;
					}

				}

				if (res.err) {

					uni.showToast({

						icon: 'none',

						title: '请求错误'

					});
					return reject(err);

				}

				return resolve(res)

			})

		}

	},

	// request 请求

	request(options = {}) {

		return this.config.beforeRequest(options).then(opt => {

			// 这里看不懂的可以看上面 uni.request 三种请求方式的第二种
			return uni.request(opt)

		}).then(res => this.config.handleResponse(res, options))

	}

}